# -*- coding: utf-8 -*-
# @Time    : 2019/5/16 15:37
# @Author  : CHEN Wang
# @Site    : 
# @File    : slim.py
# @Software: PyCharm

import sys
import traceback
import os
from quant_researcher.quant.project_tool.logger.my_logger import LOG
from quant_researcher.quant.project_tool import conf

K_TASK_INIT = conf.get('thinkive_cfy_factors_if_this_is_an_init', section='other')
K_INIT_INTERVAL = conf.get('thinkive_init_interval', section='other')
ENV_KEYS = [K_TASK_INIT, K_INIT_INTERVAL]


def if_initialize():
    """
    返回现在运行任务的配置是不是初始化任务

    :return:
        - True，初始化
        - False，不是初始化
    """
    e_val = conf.get('thinkive_cfy_factors_this_is_an_init', section='other')
    tmp = get_task_properties_from_env().get(K_TASK_INIT)
    LOG.info(f'将要去匹配 {K_TASK_INIT} 的值 {tmp} 是否等于 {e_val}')
    return True if tmp == e_val else False


def get_task_properties_from_env():
    """
    根据配置好的几个键，将项目可能使用到的几个环境变量放到一个字典中，后续使用
        - 后续项目变复杂，在 e_keys 这个 list 中增加键就好，2020-3-28 10:01:32
    :return: dict，几个根据配置的键读出来的环境变量
    """
    p_dict = {}
    for a_key in ENV_KEYS:
        LOG.info(f'将环境变量 {a_key} 装入字典')
        p_dict.update({a_key: os.getenv(a_key)})

    return p_dict


def sys_exit(err_msg='', e_code=1, throw_it=False, exception_obj=RuntimeError):
    """
    一个异常的统一处理函数，打印日志和标准输出，默认的处理方式：以退出码的方式结束

    :param str err_msg: 需要显示的错误信息，默认：''，空字符串
    :param int e_code: 错误代码，默认：1
    :param bool throw_it: 默认：False
        True，以抛出异常的方式结束
        False，以退出码的方式结束，默认的处理方式
    :param obj exception_obj: 抛异常的时候，异常类型，默认：ValueError
    :return:
    """
    err_msg = f'👻->{err_msg}(抛出异常: {throw_it}→{bool(throw_it)})'
    if err_msg:
        LOG.error(err_msg)
        print(err_msg)
    if throw_it:
        raise exception_obj(err_msg)
    else:
        traceback.print_stack()
        sys.exit(e_code)


if __name__ == '__main__':
    print(if_initialize())
